package com.zhang;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MySort {
    public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
//        strings.add("3");
//        strings.add("1");
//        strings.add("2");
        strings.add("（三）.");
        strings.add("（一）.");
        strings.add("（二）.");
//        strings.add("(3)");
//        strings.add("(1)");
//        strings.add("(2)");

        Collections.sort(strings, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                String pattern = "\\d+|\\p{Sc}|[一二三四五六七八九十十一]";
                Pattern r = Pattern.compile(pattern);
                Matcher m1 = r.matcher(s1);
                Matcher m2 = r.matcher(s2);

                List<String> numOrChinese1 = new ArrayList<>();
                List<String> numOrChinese2 = new ArrayList<>();

                while (m1.find()) {
                    numOrChinese1.add(m1.group());
                }
                while (m2.find()) {
                    numOrChinese2.add(m2.group());
                }

                for (int i = 0; i < Math.min(numOrChinese1.size(), numOrChinese2.size()); i++) {
                    if (isNumeric(numOrChinese1.get(i)) && isNumeric(numOrChinese2.get(i))) {
                        int num1 = Integer.parseInt(numOrChinese1.get(i));
                        int num2 = Integer.parseInt(numOrChinese2.get(i));
                        if (num1 != num2) {
                            return num1 - num2;
                        }
                    } else {
                        int chineseNum1 = convertChineseToNumber(numOrChinese1.get(i));
                        int chineseNum2 = convertChineseToNumber(numOrChinese2.get(i));
                        if (chineseNum1 != chineseNum2) {
                            return chineseNum1 - chineseNum2;
                        }
                    }
                }

                return numOrChinese1.size() - numOrChinese2.size();
            }
        });

        for (String s : strings) {
            System.out.println(s);
        }
    }

    public static boolean isNumeric(String str) {
        if (str == null) {
            return false;
        }
        try {
            Integer.parseInt(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    public static int convertChineseToNumber(String s) {
        if (s.equals("一")) {
            return 1;
        } else if (s.equals("二")) {
            return 2;
        } else if (s.equals("三")) {
            return 3;
        } else {
            return 0;
        }
    }
}